//package cn.zhx.xa.system.interceptor;
//
//import cn.hutool.core.util.ObjectUtil;
//import cn.hutool.core.util.StrUtil;
//import cn.zhx.xa.common.constant.RedisKey;
//import cn.zhx.xa.common.model.vo.common.Result;
//import cn.zhx.xa.common.model.vo.common.ResultCodeEnum;
//import cn.zhx.xa.utils.AuthContextUtil;
//import cn.zhx.xa.utils.JwtUtils;
//import com.alibaba.fastjson.JSON;
//import jakarta.annotation.Resource;
//import jakarta.servlet.http.HttpServletRequest;
//import jakarta.servlet.http.HttpServletResponse;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.data.redis.core.StringRedisTemplate;
//import org.springframework.stereotype.Component;
//import org.springframework.web.servlet.HandlerInterceptor;
//
//import java.io.IOException;
//import java.io.PrintWriter;
//import java.util.concurrent.TimeUnit;
//
//
//@Component
//@Slf4j
//public class LoginAuthInterceptor implements HandlerInterceptor {
//
//    @Resource
//    private StringRedisTemplate stringRedisTemplate;
//
//    @Resource
//    private JwtUtils jwtUtils;
//
//    @Override
//    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
//        // 获取请求方式
//        String method = request.getMethod();
//        if("OPTIONS".equals(method)) {      // 如果是跨域预检请求，直接放行
//            return true ;
//        }
//
//        String token = request.getHeader("token");
//        if(StrUtil.isBlank(token)){
//            responseNoLoginInfo(response) ;
//            return false ;
//        }
//
//        // 如果token不为空，那么此时验证token的合法性
//        //对token进行校验
//        Long validUid = jwtUtils.getValidUid(token);
//        if(ObjectUtil.isEmpty(validUid)) {
//            responseNoLoginInfo(response) ;
//            return false ;
//        }
//
//        // 将用户uid存储到ThreadLocal中
//        AuthContextUtil.set(validUid);
//
//        // 重置Redis中的token的有效时间
//        stringRedisTemplate.expire(RedisKey.USER_LOGIN + validUid , RedisKey.TOKEN_EXPIRE_DAYS , TimeUnit.DAYS) ;
//
//        // 放行
//        return true ;
//    }
//
//    //响应208状态码给前端
//    private void responseNoLoginInfo(HttpServletResponse response) {
//        Result result = Result.build(null, ResultCodeEnum.LOGIN_AUTH);
//        log.error(ResultCodeEnum.LOGIN_AUTH.getMessage());
//        response.setCharacterEncoding("UTF-8");
//        response.setContentType("text/html; charset=utf-8");
//        try (PrintWriter writer = response.getWriter()) {
//            writer.print(JSON.toJSONString(result));
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//    }
//
//    @Override
//    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
//        AuthContextUtil.remove();  // 移除threadLocal中的数据
//    }
//
//
//}
